"\nbars = ['close','open','high','low','avg','volume','market_cap','turnover_ratio','money','ep']\n#收益月偏度计算\nskew = data.groupby('asset').apply(lambda x:x['close'].droplevel('asset').pct_change().resample('M').apply(lambda x:x.skew()))\nskew = skew.stack().swaplevel(0,1)\nskew.name = 'skew'\n\n\n#stddev_diff\nstddev_diff = data.groupby('asset').apply(lambda x:(x['close'].droplevel('asset').pct_change().resample('M').apply(lambda x:x.std())).diff())\nstddev_diff = stddev_diff.stack().swaplevel(0,1)\nstddev_diff.name = 'stddev_diff'\n\n#年度最高价距离计算 1 - close/Max(high,252)\ndistance = data.groupby('asset').apply(lambda x:(1-x['close'] / x['high'].rolling(252).max()).droplevel('asset').resample('M').last())\ndistance = distance.stack().swaplevel(0,1)\ndistance.name = 'distance'\n\n\n#行情数据降至月频率\nbar_monthly = bar_resample(data[bars],frequency='M')\n\n# 不同month动量(非累计收益)\nmom = [bar_monthly.groupby('asset').apply(lambda x:x['close'].shift(i-1)/x['close'].shift(i)-1).droplevel(0) for i in range(1,13)]\nmom = pd.concat(mom,axis=1)\nmom.columns = ['mom%dM' % i for i in range(1,13)]\n\n# 2月month动量(累计收益)\nMom2M = bar_monthly.groupby('asset').apply(lambda x:x['close']/x['close'].shift(2)-1).droplevel(0)\nMom2M.name = 'Mom2M'\n\n\n#3month turnover\nturnover3M = bar_monthly.groupby('asset').apply(lambda x:x['turnover_ratio'].rolling(3).sum()).droplevel(0)\nturnover3M.name = 'turnover3M'\n\n\n#过去3 months成交额中位数\nmedian_turnover= bar_monthly['money'].groupby('asset').apply(lambda x:x.rolling(3).median())\nmedian_turnover.name = 'amount3M'\n\n#数据合并对齐\nmerged_data = pd.concat([bar_monthly, skew, distance, mom, Mom2M,turnover3M,median_turnover,stddev_diff],axis=1)\n"